<!--
 * @Author: 黄威
 * @Date: 2021-09-17 17:37:01
 * @LastEditors: 黄威
 * @LastEditTime: 2021-12-27 22:10:01
 * @Description: 关键字结果集组件
-->
<template>
    <MgsGeocodingResultV1
        :query-func="queryFunc"
        :field-configs="fieldConfigs || []"
        :bind-map="bindMap"
    />
</template>

<script>
import MgsGeocodingResultV1 from '@mgs/components-map/mgs-geocoding-result-v1.vue';

import ESAPI from '@/apis/esApi';
import DFCAPI from '@/apis/dfcApi';

export default {
    components: { MgsGeocodingResultV1 },
    props: {
        bindMap: Object,
        mode: { type: String, default: 'dfc' },
    },
    data() {
        return {
            fieldConfigs: [],
            queryFunc: null,
        };
    },
    created() {
        this[this.mode + 'Init']();
    },
    methods: {
        // 查询接收器
        queryReceiver(val) {
            if (!val) return;
            this[this.mode + 'Query'](val);
        },

        // es检索相关
        esInit() {
            ESAPI.getFieldConfig().then(res => (this.fieldConfigs = res));
        },
        esQuery(val) {
            // 纯关键字检索
            if (typeof val === 'string') {
                const arr = val.includes(',')
                    ? val.split(',')
                    : val.split('，');
                // 输入的是坐标
                if (arr.length >= 2) {
                    this.queryFunc = (pageIdx, pageSize, cb, errcb) => {
                        return ESAPI.queryPoiByPos({
                            lon: +arr[0],
                            lat: +arr[1],
                            pageNo: pageIdx,
                            pageSize: pageSize,
                        })
                            .then(cb)
                            .catch(errcb);
                    };
                }
                // 输入的是关键字
                else {
                    this.queryFunc = (pageIdx, pageSize, cb, errcb) => {
                        return ESAPI.queryPoiByKeyword({
                            queryText: val,
                            pageNo: pageIdx,
                            pageSize: pageSize,
                        })
                            .then(cb)
                            .catch(errcb);
                    };
                }
            }
            // 周边检索
            else if (val instanceof Array && val.length) {
                // 周边检索 todo
            }
        },
        // dfc检索相关（支持qs现场dfc服务类型）
        dfcInit() {
            this.fieldConfigs = [
                {
                    // 标题字段
                    title_field: 'placeName',
                    // 字段映射列表
                    view_fields: { address: '地址' },
                    // 位置字段（如果不存在，则取多边形内部点）
                    pos_field: 'centroid',
                    // 多边形字段
                    geom_field: 'geom',
                },
            ];
        },
        dfcQuery(val) {
            if (typeof val === 'string') {
                this.queryFunc = (pageIdx, pageSize, cb, errcb) => {
                    return DFCAPI.splitMatch(val, pageSize)
                        .then(cb)
                        .catch(errcb);
                };
            } else if (val instanceof Array && val.length) {
                this.queryFunc = (pageIdx, pageSize, cb, errcb) => {
                    return DFCAPI.addrSearch({
                        shape: val,
                        page: pageIdx - 1,
                        size: pageSize,
                    })
                        .then(cb)
                        .catch(errcb);
                };
            }
        },
    },
};
</script>
